﻿using System;
using System.Configuration;
using System.Web;
using Ext.Net;
using Ent.Inscripcion.Core;
using Ent.Inscripcion.Core.Core;
using Ent.Inscripcion.Core.Administracion;
using Ent.Inscripcion.Presentacion.ServicioSyllabusResec;
namespace Ent.Inscripcion.Presentacion
{
    public partial class RegistroEstudiante : System.Web.UI.Page
    {
        
        protected void Page_Load(object sender, EventArgs e)
        {
            //CargarDatosEstudiante(new InfoEstudiante(), "", Registro.NewRegistro());
        }
        /// <summary>
        /// Permite guardar los datos del Estudiante
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void GuardarDatos(object sender, DirectEventArgs e)
        {
            try
            {
                var Identificacion = e.ExtraParams["Identificacion"];
                var Expediente = e.ExtraParams["IdExpediente"];
                var Nombre = e.ExtraParams["Nombre"];
                var Apellido = e.ExtraParams["Apellido"];
                var Mail = e.ExtraParams["Mail"];
                var Telefono = e.ExtraParams["Telefono"];
                var Direccion = e.ExtraParams["Direccion"];
                var Clave = e.ExtraParams["Clave"];
                var Celular = e.ExtraParams["Celular"];
                var Plan = e.ExtraParams["Plan"];
                var PlanId = e.ExtraParams["PlanId"];
                int idExpediente;
                int.TryParse(Expediente, out idExpediente);
                var estudiante = Estudiante.NewEstudiante();
                estudiante.Apellido = Apellido;
                estudiante.Celular = Celular;
                estudiante.Direccion = Direccion;
                estudiante.Email = Mail;
                estudiante.Identificacion = Identificacion;
                estudiante.Nombre = Nombre;
                estudiante.Plan = Plan;
                estudiante.PlanId = PlanId;
                estudiante.Telefono = Telefono;
                estudiante.Clave = Clave;
                estudiante.ExpedienteId = idExpediente;
                estudiante.Save();
                e.Success = true;
            }
            catch (Exception ex)
            {
                e.Success = false;
                Util.RegistarLog(ex);
            }
        }
        /// <summary>
        /// Permite verficar información de la identificación ingresada
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnAceptarRegistro_Click(object sender, DirectEventArgs e)
        {
            try
            {
                var identificacion = e.ExtraParams["Identificacion"];
                var verificaRegistro = RegistroCmd.Execute(identificacion);
                var msg = "";
                string redireccion = "0";
                ServiceResec servicio;
                InfoEstudiante infoEstudiante;
                Registro registro = null;
                switch (verificaRegistro.Result)
                {
                    case 1:
                        //Aqui consultar servicio para verificar si la identificacion es una identificacion
                         servicio = new ServiceResec();
                         infoEstudiante = servicio.ObtenerEst(identificacion);
                        if (infoEstudiante.Encontrado)
                        {
                            registro = Registro.NewRegistro();
                            registro.Identificacion = identificacion;
                            var correoEstudiante = "";
                            if (infoEstudiante.Email.Contains("@"))
                                correoEstudiante = infoEstudiante.Email;
                            else if (infoEstudiante.EmailAlterno.Contains("@"))
                                correoEstudiante = infoEstudiante.EmailAlterno;
                            if (correoEstudiante != "")
                            {
                                registro.Email = correoEstudiante;
                                registro.Codigo = Guid.NewGuid().ToString();
                                registro = registro.Save();
                                CargarDatosEstudiante(infoEstudiante, servicio.ObtenerPlanEstudios(infoEstudiante.IdExpediente),registro);
                                //Aqui envia correo electronico con codigo de activacion
                                EnviarMensaje(registro.Email, registro.Codigo);
                                msg = ManejadorRecursos.GetRecurso("EnvioCodigoActivacion");
                            }
                            else
                                msg = ManejadorRecursos.GetRecurso("NoTieneMail");
                        }
                        else
                        {
                            msg = ManejadorRecursos.GetRecurso("EstudianteNoEncontrado");
                            frpActivacion.Hide();
                            frmRegistro.Show();
                        }
                        break;
                    case 2:
                        msg = verificaRegistro.Mensaje;
                        redireccion = "1";
                        break;
                    case 3:
                        registro = Registro.GetRegistro(identificacion);
                        servicio = new ServiceResec();
                        infoEstudiante = servicio.ObtenerEst(registro.Identificacion);
                        CargarDatosEstudiante(infoEstudiante, servicio.ObtenerPlanEstudios(infoEstudiante.IdExpediente),registro);
                        msg = verificaRegistro.Mensaje;
                        break;
                    default: break;
                }

                Session["Registro"] = registro;
                
                e.Success = true;
                e.ExtraParamsResponse["Mensaje"] = msg;
                e.ExtraParamsResponse["Redireccion"] = redireccion;
            }
            catch (Exception ex)
            {
                frmRegistro.Show();
                e.Success = false;
                Util.RegistarLog(ex);
            }
        }
        /// <summary>
        /// Permite reenviar código de activación al correo electronico
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnEnviarCodigo_Click(object sender, DirectEventArgs e)
        {
            try
            {
                var registro = Session["Registro"] as Registro;
                EnviarMensaje(registro.Email, registro.Codigo);
                var msg = ManejadorRecursos.GetRecurso("EnvioCodigoActivacion");
                e.Success = true;
                e.ExtraParamsResponse["Mensaje"] = msg;
                e.ExtraParamsResponse["Redireccion"] = "0";
            }
            catch (Exception ex)
            {
                e.Success = false;
                Util.RegistarLog(ex);
            }
        }
        /// <summary>
        /// Permite comprobar el código de activación
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnAceptarCodigo_Click(object sender, DirectEventArgs e)
        {
            try
            {
                var codigo = e.ExtraParams["Codigo"];
                var verificaCodigo = VerificaCodigoCmd.Execute(codigo);
                var msg = "";
                if (!verificaCodigo.Result)
                    msg = ManejadorRecursos.GetRecurso("IngresoDatosFormRegistro");
                else
                {
                    msg = ManejadorRecursos.GetRecurso("CodigoInvalido");
                    frpActivacion.Show();
                }
                e.ExtraParamsResponse["Mensaje"] = msg;
                e.ExtraParamsResponse["Redireccion"] = "0";
                e.Success = true;
            }
            catch (Exception ex)
            {
                e.Success = false;
                Util.RegistarLog(ex);
            }
        }
        /// <summary>
        /// Permite cargar la información del Estudiante en el formulario de registro
        /// </summary>
        /// <param name="infoEstudiante">Información del Estudiante</param>
        /// <param name="planesEstudio">Información de los Planes de Estudio</param>
        /// <param name="registro">Información de Registro del Estudiante</param>
        void CargarDatosEstudiante(InfoEstudiante infoEstudiante,string planesEstudio,Registro registro)
        {
            txtApellido.Text = string.Format("{0} {1}", infoEstudiante.PrimerApellido, infoEstudiante.SegundoApellido);
            txtNombre.Text = string.Format("{0} {1}", infoEstudiante.PrimerNombre, infoEstudiante.SegundoNombre);
            txtIdentificacionE.Text = registro.Identificacion;
            txtMail.Text = registro.Email;
            hidIdExpediente.Text = infoEstudiante.IdExpediente.ToString();
            // planesEstudio = "{\"Created\":[{\"Codigo\":\"CH\",\"Nombre\":\"CH\",\"Descripcion\":\"Ciencias Humanas y Religiosas\"},{\"Codigo\":\"DINT\",\"Nombre\":\"DINT\",\"Descripcion\":\"DIA DE INTERNET\"},{\"Codigo\":\"IE\",\"Nombre\":\"IE\",\"Descripcion\":\"Interactive English\"},{\"Codigo\":\"CHRACH5\",\"Nombre\":\"CIENCIAS DE LA EDUCACION MENCION CIENCIAS HUMANAS Y RELIGIOSAS\",\"Descripcion\":\"Ciencias Humanas y Religiosas-Abierta Antiguo\"},{\"Codigo\":\"SI\",\"Nombre\":\"SISTEMAS INFORMATICOS Y COMPUTACION\",\"Descripcion\":\"Sistemas Informáticos y Computación\"},{\"Codigo\":\"CH-3\",\"Nombre\":\"CH-3\",\"Descripcion\":\"Ciencias Humanas y Religiosas (Pensum-3)\"},{\"Codigo\":\"3211\",\"Nombre\":\"SISTEMAS INFORMATICOS Y COMPUTACION\",\"Descripcion\":\"Sistemas Informáticos y Computación UTPL-ECTS\"},{\"Codigo\":\"NC\",\"Nombre\":\"NC\",\"Descripcion\":\"Dirección de Estudiantes\"},{\"Codigo\":\"CISCO\",\"Nombre\":\"CISCO\",\"Descripcion\":\"Academia CISCO\"},{\"Codigo\":\"LINUX\",\"Nombre\":\"LINUX\",\"Descripcion\":\"Academia LINUX\"},{\"Codigo\":\"SEC\",\"Nombre\":\"SEC\",\"Descripcion\":\"Software Engineering Conference\"}]} ";
            
            var sdhItems = new StoreDataHandler(planesEstudio);
            var crItems = sdhItems.ObjectData<InfoServicio>();
            var infoServicios = InfoServicios.NewInfoServicios();
            foreach (var item in crItems.Created)
            {
                var itemServicio = InfoServicio.NewInfoServicio();
                itemServicio.Codigo = item.Codigo;
                itemServicio.Nombre = item.Nombre;
                itemServicio.Descripcion = item.Descripcion;
                infoServicios.Add(itemServicio);
            }
            sPlanes.DataSource = infoServicios;
            sPlanes.DataBind();
        }
        /// <summary>
        /// Permite enviar un mensaje de correo electrónico
        /// </summary>
        /// <param name="correoDestino">Correo al cual se envia</param>
        /// <param name="codigo">Código de activación</param>
        static void EnviarMensaje(string correoDestino, string codigo)
        {
            var envioEmail = new EnvioEmail();
            envioEmail.EnviarEmail(correoDestino, ManejadorRecursos.GetRecurso("AsuntoMailCodigoActivacion"), string.Format(ManejadorRecursos.GetRecurso("CuerpoMsgCodigoActivacion"), codigo));
        }
    }
}